package com.ruoyi.project.modules.pageImageElementRef.service.impl;

import java.util.*;
import java.util.stream.Collectors;

import cn.hutool.core.collection.CollectionUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.project.modules.pageImageElementRef.mapper.PageImageElementRefMapper;
import com.ruoyi.project.modules.pageImageElementRef.domain.PageImageElementRef;
import com.ruoyi.project.modules.pageImageElementRef.service.IPageImageElementRefService;
import com.ruoyi.common.core.text.Convert;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

/**
 * 页面图片与元素关系Service业务层处理
 *
 * @author smallrain
 * @date 2022-05-06
 */
@Service
public class PageImageElementRefServiceImpl implements IPageImageElementRefService {
    @Resource
    private PageImageElementRefMapper pageImageElementRefMapper;

    /**
     * 查询页面图片与元素关系
     *
     * @param id 页面图片与元素关系主键
     * @return 页面图片与元素关系
     */
    @Override
    public PageImageElementRef selectPageImageElementRefById(Long id) {
        return pageImageElementRefMapper.selectPageImageElementRefById(id);
    }

    /**
     * 查询页面图片与元素关系列表
     *
     * @param pageImageElementRef 页面图片与元素关系
     * @return 页面图片与元素关系
     */
    @Override
    public List<PageImageElementRef> selectPageImageElementRefList(PageImageElementRef pageImageElementRef) {
        return pageImageElementRefMapper.selectPageImageElementRefList(pageImageElementRef);
    }

    /**
     * 新增页面图片与元素关系
     *
     * @param pageImageElementRef 页面图片与元素关系
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int insertPageImageElementRef(PageImageElementRef pageImageElementRef) {
        if (pageImageElementRef.getPageElementIds() != null) {

        }
        return 1;
    }

    /**
     * 修改页面图片与元素关系
     *
     * @param pageImageElementRef 页面图片与元素关系
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int updatePageImageElementRef(PageImageElementRef pageImageElementRef) {
        PageImageElementRef elementRef = new PageImageElementRef();
        elementRef.setPageImageId(pageImageElementRef.getPageImageId());
        List<PageImageElementRef> pageImageElementRefs = this.pageImageElementRefMapper.selectPageImageElementRefList(elementRef);
        if (CollectionUtil.isNotEmpty(pageImageElementRefs)) {
            Map<Long, PageImageElementRef> collect = new HashMap<>();
            for (PageImageElementRef imageElementRef : pageImageElementRefs) {
                collect.put(imageElementRef.getPageElementId(), imageElementRef);
            }
            List<Long> insert = new ArrayList<>();
            for (Long pageElementId : pageImageElementRef.getPageElementIds()) {
                if (collect.containsKey(pageElementId)) {
                    collect.remove(pageElementId);
                } else {
                    insert.add(pageElementId);
                }
            }
            Collection<PageImageElementRef> values = collect.values();
            if (CollectionUtil.isNotEmpty(values)) {
                for (PageImageElementRef value : values) {
                    this.pageImageElementRefMapper.deletePageImageElementRefById(value.getId());
                }
            }
            if (insert.size() > 0) {
                for (Long pageElementId : insert) {
                    pageImageElementRef.setPageElementId(pageElementId);
                    pageImageElementRef.setId(null);
                    pageImageElementRefMapper.insertPageImageElementRef(pageImageElementRef);
                }
            }
        } else {
            for (Long pageElementId : pageImageElementRef.getPageElementIds()) {
                pageImageElementRef.setPageElementId(pageElementId);
                pageImageElementRef.setId(null);
                pageImageElementRefMapper.insertPageImageElementRef(pageImageElementRef);
            }
        }
        return 1;
    }

    /**
     * 批量删除页面图片与元素关系
     *
     * @param ids 需要删除的页面图片与元素关系主键
     * @return 结果
     */
    @Override
    public int deletePageImageElementRefByIds(String ids) {
        return pageImageElementRefMapper.deletePageImageElementRefByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除页面图片与元素关系信息
     *
     * @param id 页面图片与元素关系主键
     * @return 结果
     */
    @Override
    public int deletePageImageElementRefById(Long id) {
        return pageImageElementRefMapper.deletePageImageElementRefById(id);
    }

    @Override
    public List<PageImageElementRef> conditionList(PageImageElementRef pageImageElementRef) {
        return pageImageElementRefMapper.conditionList(pageImageElementRef);
    }
}
